查看原文
其他

Mbp 一个用于学习.NET Core的开发框架

DotNet 2021-09-23

(给DotNet加星标,提升.Net技能

转自:PeaceLee
cnblogs.com/mbpframework/p/12073102.html

前言


Mbp(https://github.com/mbpframework/Mbp)是一个.NET Core 3的企业级Web开发框架,是我个人用于学习.NET Core而发起的一个开源项目.这个借鉴了国外优秀开源项目abp vnext,及国内优秀开源框架Osharp的一些思想和实现.欢迎各路开发爱好者加入这个项目,一起学习,一起玩耍,共同成长!


Mbp目前有:


  • 简单的模块化系统,


  • 基于Jwt的统一身份验证,


  • 基于角色和自定义策略的统一授权系统,


  • 集成了swagger ui的poco controller


  • 集成了ef core


  • 提供AOP机制


后面还会继续加入Hangfire,IentityServer4,NServiceBus,RabbitMQ,SignalR,Redis,ML,ES,Multitenancy,virtualfilesystem等等.


下面简单介绍一下Mbp的这个框架吧.首先介绍下整个模块化框架的构成.



1、模块按照等级分为核心模块,组件级模块和应用级模块.核心模块默认为Mbp.Core.框架里面其他的模块都为组件级模块,模块之间会按照依赖关系顺序加载(这是一个to do项).因为目前模块比较少,启动也不会出问题,后续指定了依赖关系就会好很多拉.运行的时候Mbp会作为一个中间件加入到asp.net core的管道中.


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// 使用医学大数据开发平台框架
app.UseMedicalFramework();
// 路由中间件
app.UseRouting();
// 鉴权中间件
app.UseAuthorization();
// 路由终结点配置 开启终结点之后,mbp的权限过滤器将以中间件的形式独立运行,不会再添加到ActionDescriptor
// 也就是说,我们不要选择以这种方式来拦截和自定义鉴权算法
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}


2、Mbp.Core是框架的核心,其主要职责是将其他模块的服务注册到依赖注入系统中,同时把相关的中间件加到asp.net core管道中.同时提供了一些底层的抽象定义.


3、Mbp.AspNetCore是针对asp.net core体系封装的一个基本模块,同时这也是Mbp一个很重要的模块,很多模块都继承了它.这个模块的主要职责是实现了Poco controller和一些筛选器以级基本的asp,net core的设置都在这个模块做定义.


4、Mbp.EntityFrameworkCore,这是对EF Core的一个封装的模块,这个模块主要定义了Mbp作为一个企业级开发框架的基本主数据.包括用户,角色,菜单,权限,操作日志等(这个模块有个to do项就是要支持主数据的扩展)


5、Mbp.Authentication,是统一授权管理,其主要职责是定义了框架的授权策略


public override IServiceCollection AddServices(IServiceCollection services)
{
// 添加全局授权策略
services.AddAuthorization(options =>
{
options.AddPolicy("GlobalPermission", policy => policy.Requirements.Add(new PermissionRequirement()));
});
return base.AddServices(services);
}


6、Mbp.Authentication.JwtBearer,是统一身份验证模块,其职责是配置授权身份认证,包括身份标识,设置验证参数,设置验证事件.


public override IServiceCollection AddServices(IServiceCollection services)
{
var serviceProvider = services.BuildServiceProvider();
var jwtConfig = serviceProvider.GetService<IOptions<MbpConfig>>().Value?.Jwt;
services.TryAddScoped<IJwtBearerService, JwtBearerService>();
//配置授权
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(jwtBearerOptions =>
{
// 设置验证参数
jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(jwtConfig.SecurityKey)),
ValidateIssuer = true,
ValidIssuer = jwtConfig.Issuer,
ValidateAudience = true,
ValidAudience = jwtConfig.Audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(jwtConfig.TimeOut)
};
// 设置验证事件
jwtBearerOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("action", "timeOut");
}
return Task.CompletedTask;
}
};
});
return base.AddServices(services);
}
public override void UseModule(IApplicationBuilder app)
{
app.UseAuthentication();
base.UseModule(app);
}


7、Mbp.Ddd.Application,此模块主要是为了辅助实施DDD而做的,其主要职责是负责DDD应用层的相关能力的提供,比如定义Dto,扩展分页查询.


8、Mbp.Swagger,此模块是为框架提供web api接口UI界面.


9、Mbp.LogDashboard,此模块是为框架提供框架运行日志分析的UI界面.


下一节,将介绍我是如何用这些模块构建一个web 应用的.


推荐阅读  点击标题可跳转

什么?原来C#还有这两个关键字

ASP.NET Core开源任务调度平台 快速上手

.NET Core 学习 async/await中的Exception处理


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

好文章,我在看❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存